template<typename T, typename U>
struct Doublify{};
template<int N>
struct Exponential
{
    typedef Doublify<typename Exponential<N-1>::LongType,typename Exponential<N-1>::LongType> LongType;
};
template<>
struct Exponential<0>
{
    typedef double LongType;
};
int f(Exponential<10>::LongType*)
{
    return 3;
}
int main()
{
}
